﻿// 九、Linq查询部分
// 简单查询练习
// 题目：创建一个List<Student>集合，其中Student是一个自定义类，包含以下属性：
// string Name：学生姓名
// int Age：学生年龄
// double Score：学生成绩
// 集合中包含以下学生数据：
// 姓名"张三"，年龄20，成绩85.5
// 姓名"李四"，年龄21，成绩90.0
// 姓名"王五"，年龄19，成绩78.0
// 姓名"赵六"，年龄22，成绩88.5
var students = new List<Student>{
    new Student("张三",20,85.5),
    new Student("李四",21,90.0),
    new Student("王五",19,78.0),
    new Student("赵六",22,88.5)
};

// 使用Linq查询语句完成以下操作：
// 查询年龄大于20岁的学生，并打印他们的姓名和成绩。
System.Console.WriteLine("年龄大于20岁的学生，并打印他们的姓名和成绩:");
var one = students.Where(item => item.Age > 20).Select(item => new { item.Name, item.Score });
foreach (var item in one)
{
    System.Console.WriteLine(item);
}

// 查询成绩大于85分的学生，并按成绩降序排序，打印他们的姓名和成绩。
System.Console.WriteLine("查询成绩大于85分的学生,并按成绩降序排序,打印他们的姓名和成绩:");
var two = students
                  .Where(item => item.Score > 85)
                  .OrderByDescending(item => item.Score)
                  .Select(item => new { item.Name, item.Score });
foreach (var item in two)
{
    System.Console.WriteLine(item);
}
// 要求：使用Linq的查询语法和方法语法分别实现上述查询，并展示查询结果。


// 分组查询练习
// 题目：继续使用上题中的List<Student>集合。
// 使用Linq查询语句按学生的年龄分组，然后计算每个年龄组的平均成绩，并打印每个年龄组的年龄和对应的平均成绩。
// 要求：使用Linq的GroupBy方法进行分组，并使用Select方法计算每个分组的平均成绩，展示查询结果。
System.Console.WriteLine("使用Linq查询语句按学生的年龄分组，然后计算每个年龄组的平均成绩，并打印每个年龄组的年龄和对应的平均成绩");
students.Add(new Student("老六", 22, 90.5));
var three = students.GroupBy(item => item.Age).Select(item=>new{Age=item.Key,avgScore=item.Average(s=>s.Score)});
foreach (var item in three)
{
    System.Console.WriteLine(item);
}